package com.zzy.face.utils;

import com.mysql.jdbc.log.LogUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternUtils {
    /**
     * 正则：身份证号码 15 位
     */
    public static final String REGEX_ID_CARD15 = "^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$";
    /**
     * 正则：身份证号码 18 位
     */
    public static final String REGEX_ID_CARD18 = "^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9Xx])$";
    /***
     * 手机号码的校验
     * @param mobile 手机号码
     * @return 合法/非法
     */
    public static boolean isMobile(String mobile) {
        String regex = "^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3])|(17[5-8])|(18[0-9])|166|198|199|(147))\\d{8}$";
        Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(mobile);
        return m.matches();
    }

    /***
     * 密码校验
     * @param password 密码
     * @return 合法/非法
     */
    public static boolean isPassword(String password) {
        String regex = "^.{6,18}$";
        Pattern p = Pattern.compile ( regex, Pattern.CASE_INSENSITIVE );
        Matcher m = p.matcher ( password );
        return m.matches ();
    }

    public static String isIDCardNumGetBirth(String idCardNum) {
        if (idCardNum.length()==0) return null;
        String birthday = null;
        //15位身份证号的取7-12位为出生年月日,比如670101代表1967年1月1日
        //18位身份证号的取7-14位为出生年月日,比如19880101代表1988年1月1日
        if (idCardNum.length() == 15 && isIDCard15(idCardNum)) {
            birthday = "19" + idCardNum.substring(6, 8) + "-" + idCardNum.substring(8, 10) + "-" + idCardNum.substring(10, 12);
        } else if (idCardNum.length() == 18 && isIDCard18(idCardNum)) {
            birthday = idCardNum.substring(6, 10) + "-" + idCardNum.substring(10, 12) + "-" + idCardNum.substring(12, 14);
        } else return null;
        SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
        sd.setLenient(false);//此处指定日期/时间解析是否不严格，在true是不严格，false时为严格
        try {
            sd.parse(birthday);//从给定字符串的开始解析文本，以生成一个日期
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }
        return birthday;

        /* TODO 测试举例
        LogUtils.e("whh0603", "RegexUtils.isIDCardNumGetBirth = "
                + RegexUtils.isIDCardNumGetBirth("231124199709150420")); //有效身份证
        LogUtils.e("whh0603", "RegexUtils.isIDCardNumGetBirth = "
                + RegexUtils.isIDCardNumGetBirth("362228198702312844")); //无效身份证
        LogUtils.e("whh0603", "RegexUtils.isIDCardNumGetBirth = "
                + RegexUtils.isIDCardNumGetBirth("130503670401001"));  //有效身份证 */
    }
    /**
     * 验证身份证号码 15 位
     *
     * @param input 待验证文本
     * @return {@code true}: 匹配<br>{@code false}: 不匹配
     */
    public static boolean isIDCard15(final CharSequence input) {
        return Pattern.matches(REGEX_ID_CARD15, input);
    }

    /**
     * 验证身份证号码 18 位
     *
     * @param input 待验证文本
     * @return {@code true}: 匹配<br>{@code false}: 不匹配
     */
    public static boolean isIDCard18(final CharSequence input) {
        return Pattern.matches(REGEX_ID_CARD18, input);
    }
    public static String GetTime(){
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return df.format(new Date());
    }

    public static String getNumb(String str){
        str=str.trim();
        StringBuilder str2= new StringBuilder();
        if(!"".equals(str)){
            for(int i=0;i<str.length();i++){
                if(str.charAt(i)>=48 && str.charAt(i)<=57){
                    str2.append(str.charAt(i));
                }
            }

        }
        return str2.toString();
    }
}